Модуль tap
The tap
module streamlines the testing of other modules. It allows writing
of tests in the TAP protocol.
The results from the tests can be parsed by standard TAP-analyzers so they can be passed to utilities such as
prove.
Thus, one can run tests and then use the results for statistics, decision-making, and
so on.
Имя | Назначение |
---|---|
tap.test() | Инициализация |
taptest:test() | Создание подтеста и вывод результатов |
taptest:plan() | Указание количества проводимых тестов |
taptest:check() | Проверка количества выполненных тестов |
taptest:diag() | Отображение сообщения диагностики |
taptest:ok() | Оценка состояния и отображение сообщения |
taptest:fail() | Оценка состояния и отображение сообщения |
taptest:skip() | Оценка состояния и отображение сообщения |
taptest:is() | Проверка равенства двух аргументов |
taptest:isnt() | Проверка отличий двух аргументов |
taptest:is_deeply() | Рекурсивная проверка равенства двух аргументов |
taptest:like() | Проверка соответствия аргумента шаблону |
taptest:unlike() | Проверка отличия аргумента от шаблона |
taptest:isnil() taptest:isstring() taptest:isnumber() taptest:istable() taptest:isboolean() taptest:isudata() taptest:iscdata() |
Проверка соответствия значения определенному типу |
taptest.strict | Flag, true if comparisons with nil should be strict |
-
tap.
test
(test-name)¶ Инициализация.
Результатом
tap.test
является объект, который будет называться taptest в ходе данного разбора, что необходимо дляtaptest:plan()
и всех остальных методов.Параметры: - test-name (
string
) – произвольное имя для результата теста.
возвращает: taptest
тип возвращаемого значения: таблица
tap = require('tap') taptest = tap.test('test-name')
- test-name (
-
object
taptest
¶ -
taptest:
test
(test-name, func)¶ Создание подтеста (если не указан аргумент
func
) или (если указаны все аргументы) создание подтеста, выполнение тестовой функции и вывод результата.См. пример.
Параметры: - name (
string
) – произвольное имя для результата теста. - fun (
function
) – выполняемая тестовая логика.
возвращает: taptest
тип возвращаемого значения: userdata или строка
- name (
-
taptest:
plan
(count)¶ Указание количества проводимых тестов.
Параметры: - count (
number
) –
возвращает: nil
- count (
-
taptest:
check
()¶ Проверка количества выполненных тестов.
Выведенный результат будет включать в себя сообщение:
# bad plan: ...
, если количество выполненных тестов не равно количеству тестов, указанному вtaptest:plan(...)
. (Это собственная функция Tarantool: сообщения типа «bad plan» не входят в стандарт TAP13.)Такую проверку следует проводить только по завершении всех запланированных тестов, поэтому как правило,
taptest:check()
появится лишь в конце скрипта. Тем не менее, в качестве расширения Tarantool,taptest:check()
может появиться в начале любого подтеста. Таким образом, проверка появится в трех случаях:- при вызове
taptest:check()
в конце скрипта, - при вызове функции, которая заканчивается вызовом
taptest:check()
, - или при вызове taptest:test(„…“, имя-функции-подтеста), где функция подтеста не обязана заканчиваться на
taptest:check()
, поскольку ее можно вызвать по окончании подтеста.
возвращает: true (правда) или false (ложь). тип возвращаемого значения: boolean (логический) - при вызове
-
taptest:
diag
(message)¶ Отображение сообщения диагностики.
Параметры: - message (
string
) – отображаемое сообщение.
возвращает: nil
- message (
-
taptest:
ok
(condition, test-name)¶ Это базовая функция, которая используется другими функциями. В зависимости от условия
condition
, выводится „ok“ или „not ok“ вместе с отладочной информацией. Отображается сообщение.Параметры: - condition (
boolean
) – выражение, которое либо true (правда), либо false (ложь) - test-name (
string
) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
Пример:
tarantool> taptest:ok(true, 'x') ok - x --- - true ... tarantool> tap = require('tap') --- ... tarantool> taptest = tap.test('test-name') TAP version 13 --- ... tarantool> taptest:ok(1 + 1 == 2, 'X') ok - X --- - true ...
- condition (
-
taptest:
fail
(test-name)¶ taptest:fail('x')
– аналогtaptest:ok(false, 'x')
. Отображается сообщение.Параметры: - test-name (
string
) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
- test-name (
-
taptest:
skip
(message)¶ taptest:skip('x')
– аналогtaptest:ok(true, 'x' .. '# skip')
. Отображается сообщение.Параметры: - test-name (
string
) – имя теста
возвращает: nil
Пример:
tarantool> taptest:skip('message') ok - message # skip --- - true ...
- test-name (
-
taptest:
is
(got, expected, test-name)¶ Проверка равенства первого аргумента второму аргументу. Отображается подробное сообщение, если результатом будет false (ложь).
Параметры: - got (
number
) – фактический результат - expected (
number
) – ожидаемый результат - test-name (
string
) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
- got (
-
taptest:
isnt
(got, expected, test-name)¶ Отрицание taptest:is().
Параметры: - got (
number
) – фактический результат - expected (
number
) – ожидаемый результат - test-name (
string
) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
- got (
-
taptest:
is_deeply
(got, expected, test-name)¶ Recursive version of
taptest:is(...)
, which can be used to compare tables as well as scalar values.возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
Параметры: - got (
lua-value
) – фактический результат - expected (
lua-value
) – ожидаемый результат - test-name (
string
) – имя теста
- got (
-
taptest:
like
(got, expected, test-name)¶ Проверка совпадения строки с шаблоном. Ok, если найдено совпадение.
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
Параметры: - got (
lua-value
) – фактический результат - expected (
lua-value
) – шаблон - test-name (
string
) – имя теста
- got (
test:like(tarantool.version, '^[1-9]', "version")
-
taptest:
unlike
(got, expected, test-name)¶ Отрицание taptest:like().
Параметры: - got (
number
) – фактический результат - expected (
number
) – шаблон - test-name (
string
) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
- got (
-
taptest:
isnil
(value, message, extra)¶ -
taptest:
isstring
(value, message, extra)¶ -
taptest:
isnumber
(value, message, extra)¶ -
taptest:
istable
(value, message, extra)¶ -
taptest:
isboolean
(value, message, extra)¶ -
taptest:
isudata
(value, utype, message, extra)¶ -
taptest:
iscdata
(value, ctype, message, extra)¶ Проверка соответствия значения определенному типу. Отображается длинное сообщение, если значение не принадлежит указанному типу.
Параметры: возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
test:iscdata(slab_info.quota_size, ffi.typeof('uint64_t'), 'memcached.slab.info().quota_size returns a cdata')
-
taptest.
strict
¶ Set
taptest.strict=true
if taptest:is() and taptest:isnt() and taptest:is_deeply() must be compared strictly withnil
. Settaptest.strict=false
ifnil
andbox.NULL
both have the same effect.The default is false. For example, if and only if
taptest.strict=true
has happened, thentaptest:is_deeply({a = box.NULL}, {})
will returnfalse
.Since v. 2.8.3,
taptest.strict
is inherited in all subtests:t = require('tap').test('123') t.strict = true t:is_deeply({a = box.NULL}, {}) -- false t:test('subtest', function(t) t:is_deeply({a = box.NULL}, {}) -- also false end)
-
Для выполнения данного примера поместите скрипт в файл под названием ./tap.lua, затем сделайте tap.lua выполняемым файлом с помощью команды chmod a+x ./tap.lua
, а затем выполните его, используя Tarantool в качестве обработчика скриптов после выполнения команды ./tap.lua.
#!/usr/bin/tarantool
local tap = require('tap')
test = tap.test("my test name")
test:plan(2)
test:ok(2 * 2 == 4, "2 * 2 is 4")
test:test("some subtests for test2", function(test)
test:plan(2)
test:is(2 + 2, 4, "2 + 2 is 4")
test:isnt(2 + 3, 4, "2 + 3 is not 4")
end)
test:check()
Результатом вышеприведенного скрипта будет примерно следующее:
TAP version 13
1..2
ok - 2 * 2 is 4
# Some subtests for test2
1..2
ok - 2 + 2 is 4,
ok - 2 + 3 is not 4
# Some subtests for test2: end
ok - some subtests for test2